package imai78gae.heya.model;

import imai78gae.heya.util.DateUtil;
import imai78gae.heya.util.MessageIdGen;

import java.util.Date;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import javax.jdo.annotations.Version;
import javax.jdo.annotations.VersionStrategy;

import com.google.appengine.api.datastore.Key;

/**
 * {@link Group}に投稿されるメッセージを表わすモデルクラスです。
 * 
 * @author imai78
 *
 */
@Version(strategy = VersionStrategy.VERSION_NUMBER)
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class Message {

	/**
	 * メッセージを識別する為の{@link Key}です。
	 */
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key messageKey;
	/**
	 * メッセージIDです。
	 */
	@Persistent
	private String messageId;
	/**
	 * メッセージ本文です。
	 */
	@Persistent
	private String content;
	/**
	 * メッセージ投稿者のユーザ名です。
	 */
	@Persistent
	private String author;
	/**
	 * メッセージが投稿された日です。
	 */
	@Persistent
	private Date registered;

	/**
	 * コンストラクタ。
	 */
	public Message() {
		this.registered = DateUtil.getTodayDate();
	}
	/**
	 * 引数ありコンストラクタ。
	 * 
	 * @param content
	 * @param author
	 */
	public Message(String content, String author) {
		this();
		this.messageId = MessageIdGen.createMessageId();
		this.content = content;
		this.author = author;
	}

	public Key getMessageKey() {
		return messageKey;
	}
	public void setMessageKey(Key messageKey) {
		this.messageKey = messageKey;
	}
	public String getMessageId() {
		return messageId;
	}
	public void setMessageId(String messageId) {
		this.messageId = messageId;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public Date getRegistered() {
		return registered;
	}
	public void setRegistered(Date registered) {
		this.registered = registered;
	}

}
